package com.hecheng.wechat.openplatform.common.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


/* import com.vision.pay.config.AlipayConfig; */

/*
 * * 类名：AlipayFunction 功能：支付宝接口公用函数类 详细：该类是请求、通知返回两个文件所调用的公用函数核心处理文件，不需要修改 版本：3.3 日期：2012-08-14 说明：
 * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
 */

public class AlipayCore {

  /**
   * 除去数组中的空值和签名参数
   * 
   * @param sArray 签名参数组
   * @return 去掉空值与签名参数后的新签名参数组
   */
  public static Map<String, String> paraFilter(Map<String, String> sArray) {

    Map<String, String> result = new HashMap<String, String>();

    if (sArray == null || sArray.size() <= 0) {
      return result;
    }

    for (String key : sArray.keySet()) {
      String value = sArray.get(key);
      if (value == null || value.equals("") || key.equalsIgnoreCase("sign")
          || key.equalsIgnoreCase("sign_type")) {
        continue;
      }
      result.put(key, value);
    }

    return result;
  }

  /**
   * 把数组所有元素排序，并按照“参数=参数值”的模式用“&”字符拼接成字符串
   * 
   * @param params 需要排序并参与字符拼接的参数组
   * @return 拼接后字符串
   */
  public static String createLinkString(Map<String, String> params) {

    List<String> keys = new ArrayList<String>(params.keySet());
    Collections.sort(keys);

    String prestr = "";

    for (int i = 0; i < keys.size(); i++) {
      String key = keys.get(i);
      String value = params.get(key);

      if (i == keys.size() - 1) {// 拼接时，不包括最后一个&字符
        prestr = prestr + key + "=" + value;
      } else {
        prestr = prestr + key + "=" + value + "&";
      }
    }

    return prestr;
  }

  /**
   * 写日志，方便测试（看网站需求，也可以改成把记录存入数据库）
   * 
   * @param sWord 要写入日志里的文本内容
   *//*
      * public static void logResult(String sWord) { FileWriter writer = null; try { writer = new
      * FileWriter(AlipayConfig.LOG_PATH + "alipay_log_" + System.currentTimeMillis()+".txt");
      * writer.write(sWord); } catch (Exception e) { e.printStackTrace(); } finally { if (writer !=
      * null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }
      */


  /**
   * 把map的键值对拼成String
   * 
   * @param map
   * @return
   */
  public static String covertToStr(Map<String, String> map) {
    if (map == null || map.isEmpty()) {
      return null;
    }
    Iterator<String> iter = map.keySet().iterator();
    StringBuilder builder = new StringBuilder();
    while (iter.hasNext()) {
      String key = iter.next();
      builder.append(key + ":" + map.get(key) + "--");
    }
    return builder.toString();
  }
}
